package com.windoent.yugioh.utils;

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.CountDownTimer;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder;

import java.lang.ref.WeakReference;

/**
 * Created by hp on 2020/12/14.
 */

public class SimpleUtils {

    /*
     *
     * 简单的加载图片,依赖Glide
     * */
    public static void loadImageForView(Context context, ImageView imageView, String url, int def) {
        if (context == null) {
            return;
        }
        RequestBuilder<Drawable> drawableRequestBuilder = Glide.with(context).load(url).dontAnimate();

        if (def != 0) {
            drawableRequestBuilder.placeholder(def).into(imageView);
            return;
        }
        drawableRequestBuilder.into(imageView);
    }

    /**
     * 在按钮上启动一个定时器
     *
     * @param tvVerifyCode  验证码控件
     * @param defaultString 按钮上默认的字符串
     * @param max           失效时间（单位：s）
     * @param interval      更新间隔（单位：s）
     */
    public static void startTimer(final WeakReference<TextView> tvVerifyCode,
                                  final String defaultString,
                                  int max,
                                  int interval, final TimerListener listener) {
        tvVerifyCode.get().setEnabled(false);

        // 由于CountDownTimer并不是准确计时，在onTick方法调用的时候，time会有1-10ms左右的误差，这会导致最后一秒不会调用onTick()
        // 因此，设置间隔的时候，默认减去了10ms，从而减去误差。
        // 经过以上的微调，最后一秒的显示时间会由于10ms延迟的积累，导致显示时间比1s长max*10ms的时间，其他时间的显示正常,总时间正常
        new CountDownTimer(max * 1000, interval * 1000 - 10) {

            @Override
            public void onTick(long time) {
                // 第一次调用会有1-10ms的误差，因此需要+15ms，防止第一个数不显示，第二个数显示2s
                if (null == tvVerifyCode.get())
                    this.cancel();
                else
                    tvVerifyCode.get().setText("" + ((time + 15) / 1000) + "s");
            }

            @Override
            public void onFinish() {
                if (null == tvVerifyCode.get()) {
                    this.cancel();
                    return;
                }
                tvVerifyCode.get().setEnabled(true);
                tvVerifyCode.get().setText(defaultString);
                if (listener != null) {
                    listener.onFinished();
                }
            }
        }.start();
    }

    public interface TimerListener {
        public void onFinished();
    }

    //秒转时分秒
    public static String time2String(int useTime) {
        int hour = (int) (useTime / 3600);
        int min = (int) (useTime / 60 % 60);
        int second = (int) (useTime % 60);
        int day = (int) (useTime / 3600 / 24);
        String mDay, mHour, mMin, mSecond;//天，小时，分钟，秒
        second--;
        if (second < 0) {
            min--;
            second = 59;
            if (min < 0) {
                min = 59;
                hour--;
            }
        }
        if (hour < 10) {
            mHour = "0" + hour;
        } else {
            mHour = "" + hour;
        }
        if (min < 10) {
            mMin = "0" + min;
        } else {
            mMin = "" + min;
        }
        if (second < 10) {
            mSecond = "0" + second;
        } else {
            mSecond = "" + second;
        }
        String strTime = mHour + ":" + mMin + ":" + mSecond + "";
        return strTime;
    }

    public static int string2Time(String strTime) {
        if (BaseMethod.notNull(strTime) && strTime.contains(":")) {
            String[] split = strTime.split(":");
            int length = split.length;
            if (length == 3) {
                String mHour = split[0];
                String mMin = split[1];
                String mSecond = split[2];
                return Integer.parseInt(mHour) * 3600 + Integer.parseInt(mMin) * 60 + Integer.parseInt(mSecond);
            }
        }
        return 0;
    }

}
